//
//  PGCoreDataManager.h
//  PhotographicGuide
//
//  Created by indream on 13-2-24.
//  Copyright (c) 2013年 indream. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface PGCoreDataManager : NSObject
{
	NSError *_error;
}
@property(nonatomic,retain) NSManagedObjectContext *context;

//初始化单例，这么设计是为了防止
+ (void)initSharedInstance:(NSManagedObjectContext *)context;

//获取单例
+ (PGCoreDataManager *)sharedInstance;

//利用一个存在的NSManagedObjectContext来初始化
- (id)initWithManagedObjectContext:(NSManagedObjectContext *)context;

//创建一个新的数据并且保存到CoreData当中去
- (NSManagedObject *) createAndAddDataByEntityName:(NSString *) entityName;

//通过唯一的ID获取从CoreData中获取数据，使用此方法要保证uniqueId是NSString类型
- (NSManagedObject *) dataWithUniqueIdKey:(NSString *)uniqueIdKey uniqueIdValue:(id) uniqueId entityName:(NSString *)entityName;

//获取一个数据，如果此数据不存在，则创建一个新的数据，此接口专门设计给更新数据的时候使用
- (NSManagedObject *) dataToEditWithUniqueIdKey:(NSString *)uniqueIdKey uniqueIdValue:(id) uniqueId entityName:(NSString *)entityName;

//通过EntityName获取到所有的数据
- (NSArray *) allDataWithEntityName:(NSString *)entityName fetchLimit:(int)num;

//通过传入的谓语来获取数据
- (NSArray *) dataWithPredicate:(NSPredicate *)pre entityName:(NSString *)entityName fetchLimit:(int)num;

//通过传入的谓语字符串来获取数据
- (NSArray *) dataWithPredicateString:(NSString *)preString entityName:(NSString *)entityName fetchLimit:(int)num;

//通过谓词来选取
- (NSArray *) dataWithEntityName:(NSString *)entityName predicateKey:(NSString *)key value:(id)value;

//获取下一个唯一的ID标识
- (int) nextUniqueIdWithEntityName:(NSString *)entityName uniqueIdKey: (NSString *)key;

//从CoreData中删除数据
- (void) removeData:(NSManagedObject *)object;

//通过数据名称移除所有的数据
- (void)removeDataByEntityName:(NSString *)entityName;

//保存变更
- (void) save;

@end
